/**
 * 常用JS变量:
 * agentEvent = 代理模式下自动点击模块
 * acEvent= 无障碍模式下自动点击模块
 * device = 设备信息模块
 * file = 文件处理模块
 * http = HTTP网络请求模块
 * shell = shell命令模块
 * thread= 多线程模块
 * image = 图色查找模块
 * utils= 工具类模块
 * global = 全局快捷方式模块
 * 常用java变量：
 *  context : Android的Context对象
 *  javaLoader : java的类加载器对象
 * 导入Java类或者包：
 *  importClass(类名) = 导入java类
 *      例如: importClass(java.io.File) 导入java的 File 类
 *  importPackage(包名) =导入java包名下的所有类
 *      例如: importPackage(java.util) 导入java.util下的类
 *
 */

function main() {
  //开始再这里编写代码了！！
  let pkg = getRunningPkg();
  try {

    toast("程序开始执行");
    logd("开始 " + isServiceOk());

    //如果自动化服务正常
    if (!autoServiceStart(3)) {
      logd("自动化服务启动失败，无法执行脚本")
      exit();
      return;
    }

    // 获取权限
    let request = autoRequestScreenCapture();
    if (!request) {
      toast("没有获取到权限");
      return;
    }
    logd("获取到权限");

    logd("开始执行脚本...")

    logd("开始打开支付宝");
    openZfb()
    logd("支付宝打开完成");

    logd("开始拯救能量雨");
    kszj()
    logd("能量雨拯救完成");

    toast("执行结束");
  } catch (e) {
    toast("程序异常结束：" + e.message);
  }

  // utils.openApp(pkg)
}

/**
 * 打开支付宝
 */
function openZfb() {
  // 打开支付宝
  utils.openAppByName("支付宝");

  // 使用包名判断支付宝是否打开
  let pkg = getRunningPkg()
  while (pkg != "com.eg.android.AlipayGphone") {
    pkg = getRunningPkg()
    sleep(17)
  }
  logd("当前包名：" + pkg);
}

/**
 * 开始拯救
 */
function kszj() {
  let kszj = text("开始拯救绿色能量")
  if (!has(kszj)) {
    throw new Error("请在运行前打开指定页面")
  }
  click(kszj)

  //从工程目录下res文件夹下读取sms.png文件
  let smallTmplate = readResAutoImage("sms.png");
  try {
    logd("开始寻找能量雨");
    xznlq(smallTmplate)
  } finally {
    //图片要回收
    image.recycle(smallTmplate)
  }
}

/**
 * 寻找能量球
 */
function xznlq(smallTmplate) {

  while (true) {
    try {
      //抓取屏幕
      let time = Date.now()
      let screenImage = image.captureFullScreen();
      logd("截图耗时：" + (Date.now() - time));
      if (screenImage == null) {
        continue
      }
      //在图片中查找
      let points = image.findImage(screenImage, smallTmplate, 0, 0, 0, 0, 0.7, 0.9, 10, 5);
      //这玩意是个数组
      if (!points) {
        continue
      }
      logd("找到能量球：" + points.length);

      // 点击能量球
      for (let i = 0; i < points.length; i++) {
        let point = points[i]
        clickPoint((point.left + point.right) / 2, point.bottom)
      }

      //图片要回收
      image.recycle(screenImage)

    } finally {
      // let fhmysl = text("返回蚂蚁森林>")
      // // .getOneNodeInfo(1000)
      // logd("finally");
      // let isS = has(fhmysl);
      // logd("是否存在" + isS);
      // if (isS) {
      //   // 结束
      //   logd("能量雨已结束");
      //   toast("能量雨已结束");
      //   click(fhmysl)
      //   break;
      // }
      sleep(17);
    }
  }
}

function autoServiceStart(time) {
  for (var i = 0; i < time; i++) {
    if (isServiceOk()) {
      return true;
    }
    var started = startEnv();
    logd("第" + (i + 1) + "次启动服务结果: " + started);
    if (isServiceOk()) {
      return true;
    }
  }
  return isServiceOk();
}

main();

/**
 @description 初始化截图权限
 @version     20210102
 @author      飞云<283054503@qq.com>
 @return      boolean:返回是否请求成功
 */
function autoRequestScreenCapture() {
  // 设置图色模块初始化参数，可用于多分辨率兼容
  image.setInitParam({"action_timeout": 1000});
  // 向系统申请屏幕截图权限，返回是否请求成功
  if (isAccMode()) {
    let result = image.requestScreenCapture(10000, 0);   //自动点击允许
    if (result) {
      sleep(1000);    //避免初次截图，返回null
    } else {
      loge('申请截图权限失败');
      return false;
    }
  } else {
    // logd('不需要截图权限');
  }
  return true;
}
